// com.city.java.announcements.mapper.AnnouncementMapper.java
package com.city.java.announcements.mapper;

import com.city.java.announcements.pojo.dto.AnnouncementQuery;
import com.city.java.announcements.pojo.entity.Announcements;
import org.apache.ibatis.annotations.Param;
import java.util.List;

public interface AnnouncementMapper {
    /**
     * 插入新公告
     * @param announcement 公告对象
     * @return 影响行数
     */
    int insertAnnouncement(Announcements announcement);

    /**
     * 根据公告ID查询公告
     * @param announcementId 公告ID
     * @return 公告对象
     */
    Announcements selectById(@Param("announcementId") Long announcementId);

    /**
     * 根据类型和状态查询公告列表
     * @param type 公告类型
     * @param status 公告状态
     * @return 公告列表
     */
    List<Announcements> selectByTypeAndStatus(@Param("type") Announcements.AnnouncementType type,
                                              @Param("status") Announcements.AnnouncementStatus status);

    /**
     * 根据标题模糊查询公告列表
     * @param title 标题关键字
     * @return 公告列表
     */
    List<Announcements> selectByTitle(@Param("title") String title);

    /**
     * 查询所有公告列表
     * @return 公告列表
     */
    List<Announcements> selectAll();

    /**
     * 分页查询公告列表
     * @param query 查询条件
     * @return 公告列表
     */
    List<Announcements> select(AnnouncementQuery query);

    /**
     * 查询公告总数
     * @param query 查询条件
     * @return 总数
     */
    Long getTotalCount(AnnouncementQuery query);

    /**
     * 根据公告ID更新公告信息
     * @param announcement 公告对象
     * @return 影响行数
     */
    int updateById(Announcements announcement);

    /**
     * 根据公告ID删除公告
     * @param announcementId 公告ID
     * @return 影响行数
     */
    int deleteById(@Param("announcementId") Long announcementId);
}
